package com.glodon.paas.account.service.util;

import org.apache.commons.lang.StringUtils;

import com.glodon.paas.account.dao.domain.UserEntity;
import com.glodon.paas.util.GenericsUtil;
import com.glodon.paas.util.UUIDUtil;
//import org.springframework.security.authentication.encoding.PasswordEncoder;
/**
 * 用户密码工具类，用于所有和密码相关的操作，包括<br>
 * 密码加盐，密码加密，密码校验
 * 
 * @author a
 *
 */
public class AccountPasswordEncoder {//implements PasswordEncoder 
	/**
	 * 对user对象中的password加密，加密后原始密码丢失，不可找回<br>
	 * 
	 * @param user
	 * @return
	 */
	public static boolean encodePassword(UserEntity user){
		String salt = generalSalt();
		String inputPassword = user.getPassword();
		String encodedPassword = encodePassword(inputPassword,salt);
			
		user.setPasswordSalt(salt);
		user.setPassword(encodedPassword);		
		return true;
	}
	
	/**
	 * 用salt对password加密,如果password为空返回""
	 * 
	 * @param rawPass
	 * @param salt
	 * @return
	 */
	public static String encodePassword(String rawPass, String salt){
		if(StringUtils.isBlank(rawPass)){
			return "";
		}
		if(salt == null){
			salt="";
		}
		return GenericsUtil.md5(salt + rawPass);
	}
	
	/**
	 * 密码校验
	 * 
	 * @param salt
	 * @param inputPassword
	 * @param encodedPassword
	 * @return
	 */
	public static boolean isPasswordValid(String encPass, String rawPass, String salt){
		if(encPass == null){
			return false;
		}
		
		return encPass.equalsIgnoreCase(encodePassword(rawPass,salt));
	}
	
	/**
	 * 密码盐获取<br>
	 * 首两位指定生产，用于扩展不同时期的密码加密算法<br>
	 * 
	 * @return 16位字符串
	 */
	public static String generalSalt(){
		String salt = UUIDUtil.getUUIDStr();
		return "01"+salt.substring(18);
	}
}
